Multi-threading is a technique that split instructions into multiple streams of executions (or threads) so that they can be processed in parallel. FIG. 1A is a block diagram illustrating an example of a prior art system that can be used to support multi-threading. The system 100 includes two physical processors 105 and 110 and may be used to execute multi-threaded software applications. Each of the physical processors 105 and 110 includes a similar set of resources (e.g., architecture states, execution resources, caches, etc.). The two physical processors may share a common system bus 115 and a common main memory 120. Typically, to increase parallelism, the system 100 may employ a scheduling technique that dispatch a thread whenever the thread is ready to be dispatched.
Hyper-Threading Technology is a technology from Intel® Corporation of Santa Clara, Calif. that enables execution of threads in parallel using a single processor. Hyper-Threading Technology is a form of simultaneous multi-threading technology (SMT) where multiple threads of software applications can be executed simultaneously on one processor. This is achieved by duplicating the architectural state, with each architecture state sharing one set of processor execution resources.
FIG. 1B is a block diagram illustrating an example of a prior art system with a single processor supporting Hyper-Threading Technology. The system 101 includes a physical processor 150 having two architecture states 185 and 190 to make the physical processor 150 to be perceived as two logical processors 155 and 160. The two logical processors 155 and 160 share the same execution resources 165, caches 170, system bus 175 and main memory 180. The physical processor 150 schedules the threads in interleaved fashion depending on which of the logical processors 155 and 160 is available. Hyper-Threading Technology results in increased utilization of processor execution resources 165 and overall throughput. Hyper-Threading Technology makes the execution units busier and thus the execution units may consume slightly more power in comparison with a processor not supporting Hyper-Threading Technology.
In addition to throughput, power consumption is becoming an important consideration for modern systems. This is especially true for battery-run mobile systems, in which the average power consumption for a given fixed application is a crucial parameter to consider for the evaluation of the overall performance of the system. This is also true for other systems such as, for example server systems, because the cost to provide energy to the cluster is a concern for the service providers. Today, most of the energy saving are done via dynamic voltage/frequency scaling.